﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using System.Text;
//librerias especiales para la BD
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace CityGames
{
    public class CADCarroSocio
    {
        static private string cadConexion = System.Configuration.ConfigurationManager.ConnectionStrings["CityGames.Properties.Settings.BDCityGamesConnectionString"].ConnectionString;

        /*************************************************Funciones Ruben ***********************************************/

        /// <summary>
        /// Funcion que inserta un juego en la tabla CarroSocios
        /// </summary>        
        /// <param name="socio">
        /// El dni del socio</param>
        /// <param name="juego">
        /// El nombre del juego</param>
        /// <param name="plataforma">
        /// La plataforma del juego</param>
        /// <param name="tipo">
        /// El tipo del juego</param>
        /// <param name="cantidad">
        /// La cantidad de copias del juego</param>
        /// <returns>
        /// Un booleano que indica si se ha insertado correctamente
        /// </returns>
        public bool InsertarJuego(string socio, string juego, string plataforma, string tipo, string cantidad)
        {
            bool ok = false;
            SqlConnection conexion = null;
            SqlTransaction tr = null;
            SqlCommand comandoSql = null;

            try
            {
                string insert = "";

                insert += "INSERT INTO CarroSocios (socio, juego, plataforma, tipo, cantidad) ";
                insert += "VALUES        ('" + socio + "', '" + juego + "', '" + plataforma + "','" + tipo + "', " + cantidad + ")";

                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                tr = conexion.BeginTransaction();

                comandoSql = new SqlCommand(insert, conexion);
                comandoSql.Transaction = tr;
                comandoSql.ExecuteNonQuery();

                tr.Commit();
                ok = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return ok;
        }

        /// <summary>
        /// Funcion que borra un juego en la tabla CarroSocios
        /// </summary>
        /// <param name="socio">
        /// El dni del socio</param>
        /// <param name="juego">
        /// El nombre del juego</param>
        /// <param name="plataforma">
        /// La plataforma del juego</param>
        /// <param name="tipo">
        /// El tipo del juego</param>
        /// <returns>
        /// Un booleano que indica si se ha borrado correctamente
        /// </returns>
        public bool BorrarJuego(string socio, string juego, string plataforma, string tipo)
        {
            bool ok = false;
            SqlConnection conexion = null;
            SqlTransaction tr = null;
            SqlCommand comandoSql = null;

            try
            {
                string delete = "";

                delete += "DELETE FROM CarroSocios ";
                delete += "WHERE (socio = '" + socio + "') AND (juego = '" + juego + "') AND (plataforma = '" + plataforma + "') AND (tipo = '" + tipo + "')";

                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                tr = conexion.BeginTransaction();

                comandoSql = new SqlCommand(delete, conexion);
                comandoSql.Transaction = tr;
                comandoSql.ExecuteNonQuery();

                tr.Commit();
                ok = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return ok;
        }

        /// <summary>
        /// Funcion que devuelve los juegos insertados en la tabla CarroSocios por el socio que se indica.
        /// </summary>        
        /// <param name="socio">
        /// El dni del socio</param>
        /// <returns>
        /// Un Dataset con los juegos.
        /// </returns>
        public DataSet Juegos(string socio)
        {
            string select = "";
            DataSet resultado = new DataSet();

            try
            {
                select += "SELECT      juego, plataforma, cantidad, tipo ";
                select += "FROM        CarroSocios ";
                select += "WHERE socio = '" + socio + "' ";

                SqlConnection conexion = new SqlConnection(cadConexion);
                SqlDataAdapter da = new SqlDataAdapter(select, conexion);
                da.Fill(resultado, "Alquileres");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /// <summary>
        /// Funcion que modifica la cantidad de un juego en la tabla CarroSocios
        /// </summary>        
        /// <param name="socio">
        /// El dni del socio</param>
        /// <param name="juego">
        /// El nombre del juego</param>
        /// <param name="plataforma">
        /// La plataforma del juego</param>
        /// <param name="tipo">
        /// El tipo del juego</param>
        /// <param name="cantidad">
        /// La cantidad de copias del juego</param>
        /// <returns>
        /// Un booleano que indica si se ha modificado correctamente
        /// </returns>
        public bool ModificarCantidad(string socio, string juego, string plataforma, string tipo, string cantidad)
        {
            bool ok = false;
            SqlConnection conexion = null;
            SqlTransaction tr = null;
            SqlCommand comandoSql = null;

            try
            {
                string update = "";

                update += "UPDATE CarroSocios ";
                update += "SET cantidad = " + cantidad + " ";
                update += "WHERE (socio = '" + socio + "') AND (juego = '" + juego + "') AND (plataforma = '" + plataforma + "') AND (tipo = '" + tipo + "')";

                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                tr = conexion.BeginTransaction();

                comandoSql = new SqlCommand(update, conexion);
                comandoSql.Transaction = tr;
                comandoSql.ExecuteNonQuery();

                tr.Commit();
                ok = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return ok;
        }

        /// <summary>
        /// Funcion que devuelve la cantidad de un juego en la tabla CarroSocios
        /// </summary>        
        /// <param name="socio">
        /// El dni del socio</param>
        /// <param name="juego">
        /// El nombre del juego</param>
        /// <param name="plataforma">
        /// La plataforma del juego</param>
        /// <param name="tipo">
        /// El tipo del juego</param>
        /// <returns>
        /// Un entero con el numero de juegos
        /// </returns>
        public int CantidadJuego(string socio, string juego, string plataforma, string tipo)
        {
            int cantidad = 0;
            SqlConnection c = null;
            string select = "";

            try
            {
                select += "SELECT cantidad FROM CarroSocios ";
                select += "WHERE (socio = '" + socio + "') AND (juego = '" + juego + "') AND (plataforma = '" + plataforma + "') AND (tipo = '" + tipo + "') ";

                c = new SqlConnection(cadConexion);
                c.Open();
                SqlCommand command = new SqlCommand(select, c);
                SqlDataReader dr = command.ExecuteReader();

                if (dr.Read())
                    cantidad = int.Parse(dr["cantidad"].ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                c.Close();
            }

            return cantidad;
        }

        /*************************************************Fin Funciones Ruben ***********************************************/
    }
}
